package com.shzg.im.service;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.SortedSet;
import java.util.TreeSet;

import com.shzg.im.model.Message;
import com.shzg.im.model.comparator.MessageSendTimeComparator;

public class MessageManager {

    private static MessageManager msgMgr = new MessageManager();
    private static Map<String, SortedSet<Message>> msgMap = new HashMap<String, SortedSet<Message>>();
    SortedMap<Message, String> d = null;

    private MessageManager() {
    }

    public static MessageManager getInstance() {
        return msgMgr;
    }

    public void saveMessage(Message msg) {

        String key = msg.getTo_dest_id();

        SortedSet<Message> msgLst = msgMap.get(key);
        if (msgLst == null) {
            msgLst = new TreeSet<Message>(new MessageSendTimeComparator());
            msgMap.put(key, msgLst);
        }
        msgLst.add(msg);

    }

    public List<Message> getMessageListByDestId(String destId) {
        List<Message> msgLst = new LinkedList<Message>();
        SortedSet<Message> msgSet = msgMap.get(destId);

        if (msgSet == null || msgSet.isEmpty()) {
            return msgLst;
        }

        Message msg = null;
        do {
            msg = msgSet.last();
            msgLst.add(msg);
            msgSet.remove(msg);
        } while (msg != null && msg.getRead_flag() == 0
                && msgSet.isEmpty() == false);

        return msgLst;
    }

}
